package com.patri.tema1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import android.app.Activity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
//TO DO verifiva lista + refresh de fiecare data cand se deschide aplicatia
public class lista1 extends BaseAdapter{
	//referinta catre activitatea care afiseaza lista
		private Activity activity;
		
		public ArrayList<Oras> orase = new ArrayList<Oras>();

		public lista1(Activity activity)
		{
			this.activity = activity;
		}

		public View getView (int position, View convertView, ViewGroup list) 
		{
		
			View element;

			// convertView este un element din lista ce nu mai este vizibil si poate fi refolosit
			if (convertView == null) 
				//daca nu avem un element grafic indisponibil (ascuns) care sa fie repozitionat automat la derulare,
				//atunci trebuie sa il cream de la 0.
			{
				LayoutInflater inflater = activity.getLayoutInflater();
				element = inflater.inflate(R.layout.oras, null); 
				
				
				
				TagOrase tagOrase = new TagOrase();
				tagOrase.nume = (TextView)element.findViewById(R.id.numeOras); 
				//tagOrase.tara = (TextView)element.findViewById(R.id.tara); 
				tagOrase.poza = (ImageView)element.findViewById(R.id.poza_oras); 
				
				
				element.setTag(tagOrase); 
				
			} else {
				
				element = convertView;
			}
			
			//preluam informatiile auxiliare stocate in elementul grafic 
			TagOrase tagOrase = (TagOrase)element.getTag();
			
			//setam continutul efectiv pe care elementul grafic il afiseaza
			//referintele catre elementele grafice gen TextView, ImageView, le avem deja stocate de cand am creat obiectul
			// grafic specific unul element din lista (mai sus).
			tagOrase.nume.setText(orase.get(position).getNumeOras());
			//tagOrase.tara.setText(orase.get(position).getTara());
			tagOrase.poza.setImageResource(R.drawable.icon);

			return element;
		}

		public int getCount ()
		{
			// intoarce nr de elemente din model
			return orase.size ();
		}

		public Object getItem(int position) 
		{
			// intoarce elementul de pe pozitia position din model
			return orase.get(position);
		}

		public long getItemId(int position) 
		{
			// fiecare element din lista poate avea un id customizabil de catre programator.
			// in cazul de fata, id-ul este chiar pozitia in cadrul modelului.
			return position;
		}

		//functia este apelata la apasarea pe buton si adauga automat un personaj nou in lista.
		public void adaugaOrasRandom ()
		{
			Oras o = new Oras();
			o.setNumeOras("Bucuresti " + orase.size());
			orase.add(o);
			this.notifyDataSetChanged();
		}
		public void adaugaOras (String nume)
		{
			Oras o = new Oras();
			o.setNumeOras(nume);
			Log.d("patri"," nume oras citit:"  +nume);
			int k=0;
			for (int i=0;i<orase.size();i++)
				if(orase.get(i).getNumeOras().equalsIgnoreCase(nume)) k=1;
			if(k==0)   orase.add(o);
		//Collections.sort(orase);
			Collections.sort(orase, new Comparator<Oras>(){
				 
	            public int compare(Oras o1, Oras o2) {
	                Oras p1 = (Oras) o1;
	                Oras p2 = (Oras) o2;
	               return p1.getNumeOras().compareToIgnoreCase(p2.getNumeOras());
	            }
	 
	        });
			int l=orase.size();
			Log.d("patri", "size orase"+l);
			for (int i=0;i<l;i++)
				Log.d("patri", "oras:"+i+ orase.get(i).getNumeOras());
			this.notifyDataSetChanged();
		}

		//functia, declansata de o apasare lunga, determina stergerea personajului selectat.
		public void stergeOras (int position) {
			orase.remove(position);
			this.notifyDataSetChanged();
		}
		

	}
